#ifndef _TABLE_H_
#define _TABLE_H_

#include<map>
#include<string>
#include<vector>
using namespace std;
enum type_kind{
    INT8_TYPE,
    INT16_TYPE,
    INT32_TYPE,

    UINT8_TYPE,
    UINT16_TYPE,
    UINT32_TYPE,

    DOUBLE_TYPE,
    POINTER_TYPE,
    CLASS_TYPE
};
struct type{ 
    int typeKind;         // 数据类型：INT CLASS
    int size;             // 类型大小
    bool op_add_check(type* a,type* b){
        if (a->typeKind == type_kind::CLASS_TYPE || b->typeKind == type_kind::CLASS_TYPE){
            return false;
        }
        return true;
    }
};


enum access_modifier{
    DEFAULT,
    PUBLIC,
    PRIVATE
};

struct variable_info{
    type*   type_info;
    access_modifier access_modifier;
    bool    is_static;
    int     address;
};


struct function_info{
    type*           return_type;    // 返回类型
    vector<type*>   param_list;     // 形参列表
                                    // 作用域，是谁的成员函数
    int address;                    // 存储地址
};




#endif